// #include <iostream>
// #include<string>
// using namespace std;
// //处理自定义类型
// //函数模版处理自定义类型
//
// class MM
// {
// public:
//     MM(string name,int age):name(name),age(age)
//     {
//
//     }
//     //函数运算符重载
//     friend ostream& operator<<(ostream& out,const MM& object)
//     {
//         out << object.name << object.age << endl;
//         return out;
//     }
// protected:
//     string name;
//     int age;
// };
//
// template<typename _Ty1>
// void print(_Ty1 data)
// {
//     cout << data <<  endl;
// }
//
// //类模版处理自定义类型
//
// template<typename _Ty1>
// struct Node
// {
//     _Ty1 data;
//     Node<_Ty1>* next;
//     Node(_Ty1 data):data(data),next(nullptr){}
//     Node(_Ty1 data,Node<_Ty1>* node):data(data),next(node){}
// };
//
// template<typename _Ty1>
// class List
// {
// public:
//     List():frontNode(nullptr),backNode(nullptr),count(0)
//     {
//
//     }
//
//     void push_front(_Ty1 data)
//     {
//         if (count==0)
//         {
//             frontNode=backNode=new Node<_Ty1>(data);
//         }else
//         {
//             frontNode = new Node<_Ty1>(data,frontNode);
//         }
//         count++;
//     }
//
//     void print()
//     {
//         Node<_Ty1>* pmove = frontNode;
//         while (pmove!=nullptr)
//         {
//             cout << pmove->data;
//             pmove = pmove->next;
//         }
//         cout << endl;
//     }
//
// protected:
//     Node<_Ty1>* frontNode;
//     Node<_Ty1>* backNode;
//     int count;
// };
//
// class Boy
// {
// public:
//     Boy(string name,int age):name(name),age(age)
//     {
//
//     }
//
//     //函数运算符重载
//     friend ostream& operator<<(ostream& out,const Boy& object)
//     {
//         out << object.name << object.age << endl;
//         return out;
//     }
// protected:
//     string name;
//     int age;
// };
//
//
// int main()
// {
//
//     // print(MM("小方",1)); //_Ty1 = MM 会报错 MM 不能打印
//
//     List<int> num;
//     num.push_front(1);
//     num.push_front(2);
//     num.push_front(3);
//     num.print();
//     List<MM> mm;
//     mm.push_front(MM("xiaofang",19));
//
//     mm.push_front(MM("xiaofan",20));
//     mm.push_front(MM("xiaoang",30));
//     mm.print();
//
//     return 0;
// }